package com.vita.core.put;

import com.vita.core.task.CompTask;
import com.vita.core.task.Task;
import com.vita.core.task.TaskExecute;
import com.vita.excepsion.ConverterException;

import java.util.ArrayList;
import java.util.List;

/**
 * Output （累加输出操作符）：
 * 所有的 Output(O o) 内容都会累加到一个list里面
 */
public class Output<I,O> implements Task {
    private List<I> inputs;
    private List<O> outputs;

    public Output(List<I> list,O o) {
        this.inputs = list;
        this.outputs = new ArrayList<>();
        this.outputs.add(o);
    }

    public Output(List<I> inputs,List<O> outputs) {
        this.inputs = inputs;
        this.outputs = outputs;
    }

    public Output<I,O> output(O o){
        this.outputs.add(o);
        return this;
    }

    public Output<I,O> output(List<O> list){
        this.outputs.addAll(list);
        return this;
    }

    public List<O> getOutputs() {
        return outputs;
    }

    public List<I> getInputs() {
        return inputs;
    }

    @Override
    public void plan(TaskExecute execute) {
        if(inputs.size()>1) throw new ConverterException("请使用 PutsExecute<I,O>");
        execute.run(inputs.get(0),outputs.get(0));
    }

    public void plan(PutsExecute execute) {
        execute.run(inputs,outputs);
    }

    @Override
    public Output<I,O> oneStep(Task task) {
        if(task instanceof CompTask){
            task.oneStep(task);
        }else{
            throw new ConverterException("oneStep(Task task) 不支持SimpTask的传入，请使用CompTask");
        }
        return this;
    }
}
